#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<windows.h>

//全局变量
int position_x,position_y;//飞机位置 
int high,width;//画面大小 
int bullet_x,bullet_y;//子弹位置 
int enemy_x,enemy_y;//敌机位置 
int score; 

void gotoxy(int x,int y)//类似于清屏函数，光标移动到原点位置进行重画
{
    HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD pos;
    pos.X = x;
    pos.Y = y;
    SetConsoleCursorPosition(handle,pos);
}

void starup()//数据初始化
{
	high=20;
	width=20;
	position_x=width/2;
	position_y=high/2;
	bullet_y=0;
	bullet_x=position_x;
	enemy_y=0;
	enemy_x=position_x;
	score=0;
 } 

void show()//画面显示
{
	gotoxy(0,0); 
	int i,j;
	for(i=0;i<high;i++)
	{
		for(j=0;j<width;j++)
		{
			if((i==position_y)&&(j==position_x))
					printf(" *");//输出飞机
			if((i==position_y+1)&&(j==position_x-1))
					printf("*****");
			if((i==position_y+2)&&(j==position_x-2))
					printf("  * * ");
			else if((i==enemy_y)&&(j==enemy_x))
				printf("@");
			else if((bullet_x==j-1)&&(bullet_y==i))
				printf("|");//输出子弹 
			else
				printf(" ");//输出空格 
		}
		printf("\n");
	}
		printf("得分：%d",score); 
		if(position_x-2==width||position_x-2==0)
		position_x=width/2;
	else if(position_y+2==high||position_y+2==0)
		position_y=high/2;
 } 
 
 updatewithoutinput()//与用户输入无关的更新
 {
 	if((bullet_x==enemy_x)&&(bullet_y==enemy_y))
 	{
 		score++;
 		enemy_y=-1;
 		enemy_x=rand()%width;
 		bullet_y=-2;
	 }
	 if(enemy_y>high)
	 {
	 	enemy_y=-1;
	 	enemy_x=rand()%width;
	 }
 	if(bullet_y>-1)
 		bullet_y--;
 	static int speed=0;//飞机下落 
 	if(speed<(30-score))
 		speed++;
 	if(speed==(30-score))
 	{
 		enemy_y++;
 		speed=0;
	 }
	 if((30-score)==10)
	 	speed=30;
 }
 
void updatewithinput()//与用户输入有关的更新 
{
	char input;
	if(kbhit())
	{
		input=getch();
		if(input=='w')
			position_y--;//上移 
		if(input=='s')
			position_y++;//下移 
		if(input=='a')
			position_x--;//左移 
		if(input=='d')
			position_x++;//右移 
		if(input==' ')
		{
			bullet_x=position_x;
			bullet_y=position_y-1;
		}
		if(input==27)
			system("pause");
	}
}


 int main()
 {
 	starup();//数据初始化
	 while(1)//游戏循环执行
	 {
	 	show();//画面显示
		 updatewithoutinput();//与用户输入无关的更新
		 updatewithinput();//与用户输入有关的更新 
	  } 
 }
